Merged
Conversation
hisonghy
reviewed
Aug 3, 2025
src/main/java/com/ject/studytrip/auth/infra/filter/JwtFilter.java
Outdated
Show resolved
Hide resolved
hisonghy
reviewed
Aug 3, 2025
.../com/ject/studytrip/auth/infra/repository/redis/RefreshTokenRedisRedisRepositoryAdapter.java
Outdated
Show resolved
Hide resolved
hisonghy
reviewed
Aug 3, 2025
src/main/java/com/ject/studytrip/auth/application/service/TokenService.java
Outdated
Show resolved
Hide resolved
Contributor
Author
피그백 내용 반영해서 머지 진행하겠습니다. |
* feat: CacheKeyConstants 추가 * feat: RefreshTokenRedisRepository, RefreshTokenRedisRepositoryAdapter 구현 * feat: LogoutTokenRedisRepository, LogoutTokenRedisRepositoryAdapter 구현 * feat: TokenService 구현 * feat: TokenProvider에 getRefreshTokenExpirationTime 메서드 추가 * feat: TokenProvider에 getAccessTokenRemainingTime 메서드 추가 * feat: TokenReissueRequest 추가 * feat: LogoutRequest 추가 * feat: AuthFacade에 reissueToken, logout 메서드 추가 * feat: AuthController에 reissueToken, logout 메서드 추가 * feat: JwtFilter에 로그아웃 토큰 블랙리스트 검증 로직 추가 * feat: MemberRepository, MemberRepositoryAdapter에 deleteById 메서드 추가 * feat: MemberQueryRepository, MemberQueryRepositoryAdapter 구현 * refactor: KakaoLoginService에서 getTokens 메서드 삭제 * refactor: TokenProvider에서 extractMemberRoleFromToken -> extractRoleFromToken 이름 변경 * refactor: MissionController.updateMission()에 @Valid 어노테이션 추가 * refactor: UpdateMissionRequest에서 @JsonInclude(JsonInclude.Include.NON_NULL) 어노테이션 제거 * refactor: UpdateMissionRequest에 @notblank 어노테이션 추가 * refactor: MissionFacade, MissionService에서 updateMissionNameAndMemo -> updateMissionNameAndMemoIfPresent 이름 변경 * refactor: TokenProvider.createRefreshToken() 비즈니스 로직 개선 * refactor: JwtFilter를 global.security 패키지로 이동 * refactor: JwtFilter를 JwtAuthenticationFilter로 이름 변경 * test: TokenServiceTest 단위 테스트 추가 * test: TokenReissueRequestFixture 추가 * test: LogoutRequestFixture 추가 * test: AuthControllerIntegrationTest ReissueToken, Logout 통합 테스트 추가 * test: TokenTestHelper에 createRefreshToken 메서드 추가 * test: MemberTestHelper에 deleteMemberById 메서드 추가 * test: MemberServiceTest에 GetRoleByMemberId 단위 테스트 추가 * fix: Redis에 저장되는 memberId가 직렬화되어 깨지는 문제 해결
dbb1564 to
ce62dbd
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📌 작업 내용 및 특이사항
✅ 토큰 재발급 API
TokenService.reissueToken()을 통해 수행되며,TokenReissueRequest를 사용RefreshTokenRedisRepository.existsRefreshToken()을 통해, 전달된 리프레시 토큰이 Redis에 저장되어 있는지 검증RefreshTokenRedisRepository.findMemberIdByRefreshToken()을 통해, Redis에서 리프레시 토큰에 대응하는 멤버 ID를 조회MemberQueryRepository.findMemberRoleById()를 통해, 멤버 ID에 대한 Role을 조회TokenProvider.getRefreshTokenExpirationTime()을 통해, 리프레시 토큰의 만료시간을 전달TokenProvider.createAccessToken()을 통해, 새로운 엑세스 토큰을 발급TokenProvider.createRefreshToken()을 통해, 새로운 리프레시 토큰을 발급RefreshTokenRedisRepository.deleteRefreshToken()을 통해, Redis에 저장했던 리프레시 토큰을 제거RefreshTokenRedisRepository.saveRefreshToken()을 통해, 새로운 리프레시 토큰을 Redis에 저장✅ 로그아웃 API
TokenService.logout()을 통해 수행되며,LogoutRequest를 사용RefreshTokenRedisRepository.existsRefreshToken()을 통해, 전달된 리프레시 토큰이 Redis에 저장되어 있는지 검증TokenProvider.getAccessTokenRemainingTime()을 통해, 엑세스 토큰의 잔여시간을 전달LogoutTokenRedisRepository.saveAccessToken()을 통해, 엑세스 토큰을 Redis 블랙리스트에 저장RefreshTokenRedisRepository.deleteRefreshToken()을 통해, Redis에 저장했던 리프레시 토큰을 제거JwtFilter에서 블랙리스트에 등록된 엑세스 토큰이 들어오면, 인증 처리를 중단하고 예외 발생✅ TokenProvider 메서드 추가
✅ 리포지토리 메서드 추가
MemberRepository.deleteById()메서드 추가✅ 멤버 QueryDSL 조회 리포지토리
MemberQueryRepository,MemberQueryRepositoryAdapter클래스 구현✅ 요청(Request) DTO
TokenReissueRequest: 토큰 재발급 요청LogoutRequest: 로그아웃 요청✅ 캐시 키 ENUM
CacheKeyConstants: Redis에 저장되는 각 캐시의 접두사를 관리하는 상수✅ 테스트
TokenServiceTest단위 테스트 추가AuthControllerIntegrationTest에 ReissueToken, Logout 통합 테스트 추가TokenReissueRequestFixture,LogoutRequestFixture추가TokenTestHelper에 createRefreshToken 메서드 추가MemberTestHelper에 deleteMemberById 메서드 추가MemberServiceTest에 GetRoleByMemberId 단위 테스트 추가🌱 관련 이슈
🔍 참고사항
KakaoLoginService에서 getTokens 메서드 삭제MissionController.updateMission()에@Valid어노테이션 추가UpdateMissionRequest에서@JsonInclude어노테이션 제거UpdateMissionRequest에@NotBlank어노테이션 추가MissionFacade,MissionService에서 updateMissionNameAndMemo -> updateMissionNameAndMemoIfPresent 이름 변경TokenProvider에서 extractMemberRoleFromToken → extractRoleFromToken 이름 변경JwtFilter를JwtAuthenticationFilter로 이름 변경JwtAuthenticationFilter를global.security패키지로 이동